/**
 * <b>package-info不是平常类，其作用有三个:</b><br>
 * 1、为标注在包上Annotation提供便利；<br>
 * 2、声明包的私有类和常量；<br>
 * 3、提供包的整体注释说明。<br>
 */
@TestAnnotation// ElementType.PACKAGE
package com.maple.annotation.metaannotation;

import java.lang.annotation.Annotation;

import cn.com.vipkid.annotationtest.TestAnnotation;

class Client {
  public static void main(String[] args) {
    // 可以通过I/O操作或配置项获得包名
    String pkgName = "com.maple.annotation.metaannotation";
    Package pkg = Package.getPackage(pkgName);
    // 获得包上的注解
    Annotation[] annotations = pkg.getAnnotations();
    // 遍历注解数组
    for (Annotation an : annotations) {
      if (an instanceof TestAnnotation) {
        System.out.println("Hi,I'm the TestAnnotation");
          /*
           * 注解操作
           * MyAnnotation myAnn = (PkgAnnotation)an;
           * 还可以操作该注解包下的所有类，比如初始化，检查等等
           * 类似Struts的@Namespace，可以放到包名上，标明一个包的namespace路径
           */
      }
    }
  }
}

// 这里是包类，声明一个包使用的公共类，强调的是包访问权限
class PkgClass {
  public void test() {}
}
// 包常量，只运行包内访问，适用于分“包”开发
class PkgConst {
  static final String PACAKGE_CONST = "ABC";
}
